home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / docs / rakup / match01.doc < prev    next >
Text File  |  1998-10-03  |  13KB  |  439 lines

  1. ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
  2. (MATCH01.DOC)
  3.  é¿ïCèyé▓é¡éτé¡âvâìâOâëâ~âôâOôⁿûσ ö╘èOò╥ üuâGâLâXâpü[âgâVâXâeâÇé╠ì∞ɼüv
  4.                                                                ìLêΣü@É╜ 
  5. ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
  6.  
  7. ü¢âpâ^ü[âôâ}âbâ`âôâO
  8.  
  9.   âpâ^ü[âôâ}âbâ`âôâO(pattern matching)é═üuî^ìçéφé╣üvé╞éóéñîƒì⌡ò√û@é╠êΩé┬
  10.  
  11. é┼é╖üBé╜é╞éªé╬üA
  12.  
  13.  
  14.   üuæ╛ÿYé═âRü[âqü[é¬ìDé½üv
  15.   üuæ╛ÿYé═âRâRâAé¬ìDé½üv
  16.   üuë╘Äqé═ìgÆâé¬ìDé½üv
  17.  
  18.  
  19. é╞éóéñâfü[â^é≡üAăé╠éµéñé╚âèâXâgé┼ò\é╖é▒é╞é╔é╡é▄é╖üB
  20.  
  21.  
  22.   (æ╛ÿY ìDé½ âRü[âqü[)
  23.   (æ╛ÿY ìDé½ âRâRâA)
  24.   (ë╘Äq ìDé½ ìgÆâ)
  25.  
  26.  
  27.   âpâ^ü[âôâ}âbâ`âôâOé═üAé▒é╠éµéñé╚âfü[â^é⌐éτÅεò±é≡ÆèÅoé╖éΘé╜é▀é╔ÄgéφéΩé▄
  28.  
  29. é╖üBâfü[â^é╞ô»ùlé╔âpâ^ü[âôéαâèâXâgé┼ò\é╖é╠é┼é╖é¬üAâèâXâgé╠Æåé╔âpâ^ü[âôò╧
  30.  
  31. Éö(pattern variable)é≡Ägéñé▒é╞é¬é┼é½éΘé╠é¬ô┴ÆÑé┼é╖üBâpâ^ü[âôò╧Éöé═üAéóéδ
  32.  
  33. éóéδé╚ò\î╗ò√û@é¬éáéΘé╠é┼é╖é¬üAé▒é▒é┼é═ëpæσò╢ÄÜé┼Äné▄éΘâVâôâ{âï[*1]é╞ÆΦï`
  34.  
  35. é╡é▄é╖üBâpâ^ü[âôò╧Éöé≡è▄é▐ùßé≡ăé╔Īé╡é▄é╖üB
  36.  
  37.  
  38.   (æ╛ÿY ìDé½ X)
  39.   (æ╛ÿY Y âRü[âqü[)
  40.   (ë╘Äq X Y)
  41.   (ë╘Äq Z Z)
  42.  
  43.  
  44. âpâ^ü[âôÆåé╔âpâ^ü[âôò╧Éöé≡è▄é▄é╚éóÅΩìçé═üAequal é╔éµéΘâèâXâgé╠öΣèré╞ô»é╢
  45.  
  46. ô«ì∞é╔é╚éΦé▄é╖üBé╡é╜é¬é┴é─üA(æ╛ÿY ìDé½ âRü[âqü[) é╞éóéñâpâ^ü[âôé═üAâfü[
  47.  
  48. â^ (æ╛ÿY ìDé½ âRü[âqü[) é╞êΩÆvé╡é▄é╖é¬üA(æ╛ÿY ìDé½ âRâRâA) é╞é═êΩÆvé╡é▄
  49.  
  50. é╣é±üB
  51.  
  52.   âpâ^ü[âôÆåé╔âpâ^ü[âôò╧Éöé≡è▄é±é┼éóéΘÅΩìçüAâpâ^ü[âôÆåé┼ì┼Åëé╔Åoî╗é╖éΘâp
  53.  
  54. â^ü[âôò╧Éöé═âÅâCâïâhâJü[âhé╠éµéñé╔ô¡é½é▄é╖üBé╜é╞éªé╬üA(æ╛ÿY ìDé½ X) é╞éó
  55.  
  56. éñâpâ^ü[âôé╞ (æ╛ÿY ìDé½ âRü[âqü[) é╞éóéñâfü[â^é≡â}âbâ`âôâOé│é╣é─é▌é▄é╖üB
  57.  
  58. é▒é╠ÅΩìçüAèeùvæfé≡öΣèré╡é─éóé¡é╞üAüuæ╛ÿYüvé╞üuìDé½üvé═êΩÆvé╡é▄é╖é¬üAì┼îπ
  59.  
  60. é╠ùvæf X é╞üuâRü[âqü[üvé¬ÄcéΦé▄é╖üB
  61.  
  62.  
  63.                         (æ╛ÿY ìDé½ âRü[âqü[)
  64.                           ü¬   ü¬    ü¬
  65.                           ü¢   ü¢    ü¢
  66.                           ü½   ü½    ü½
  67.                         (æ╛ÿY ìDé½    X)      X = âRü[âqü[
  68.  
  69.                    É} 1 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éPüj
  70.  
  71.  
  72.   X é═âpâ^ü[âôò╧Éöé┼é╖é¬üAé▒é╠âpâ^ü[âôé╠Æåé┼ì┼Åëé╔î╗éΩé╜é╠é┼üAX é╞üuâRü[
  73.  
  74. âqü[üvé═êΩÆvé╖éΘé╠é┼é╖üBé╡é╜é¬é┴é─üA(æ╛ÿY ìDé½ X) é╞ (æ╛ÿY ìDé½âRü[âqü[)
  75.  
  76. é═êΩÆvé╡é▄é╖üBô»ùlé╔üA(æ╛ÿY ìDé½ X) é╞ (æ╛ÿY ìDé½ âRâRâA) éαêΩÆvé╡é▄é╖üB
  77.  
  78.  
  79.                         (æ╛ÿY ìDé½ âRü[âqü[)
  80.                           ü¬   ü¬    ü¬
  81.                           ü¢   ü¢    ü¢
  82.                           ü½   ü½    ü½
  83.                         (æ╛ÿY   Y  âRü[âqü[)   Y = ìDé½
  84.  
  85.  
  86.                         (æ╛ÿY ìDé½ âRü[âqü[)
  87.                           ü¬   ü¬    ü¬
  88.                           ü¢   ü¢    ü~
  89.                           ü½   ü½    ü½
  90.                         (æ╛ÿY   Y  âRâRâA)
  91.  
  92.                                 Y = ìDé½ é╛é¬ì┼îπé┼òsêΩÆvé╞é╚éΘ
  93.  
  94.                    É} 2 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éQüj
  95.  
  96.  
  97.   âpâ^ü[âôò╧Éöé═âpâ^ü[âôÆåé╠é╟é▒é╔î╗éΩé─éαé⌐é▄éóé▄é╣é±üB(æ╛ÿY Y âRü[âqü[)
  98.  
  99. é╞ (æ╛ÿY ìDé½ âRü[âqü[) é═üAY é¬üuìDé½üvé╞êΩÆvé╖éΘé╠é┼üAâ}âbâ`âôâOé═ɼî≈
  100.  
  101. é╞é╚éΦé▄é╖üB(æ╛ÿY ìDé½ âRâRâA) é╞â}âbâ`âôâOé│é╣éΘé╞üAY é═üuìDé½üvé╞êΩÆv
  102.  
  103. é╖éΘé╠é┼é╖é¬üAüuâRü[âqü[üvé╞üuâRâRâAüvé═êΩÆvé╡é╚éóé╠é┼Ä╕ösé╡é▄é╖üB
  104.  
  105.  
  106.                         (ë╘Äq ìDé½ ìgÆâ)
  107.                           ü¬   ü¬    ü¬
  108.                           ü¢   ü¢    ü¢
  109.                           ü½   ü½    ü½
  110.                         (æ╛ÿY   X    Y )   X = ìDé½, Y = ìgÆâ
  111.  
  112.                    É} 3 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éRüj
  113.  
  114.  
  115.   é▄é╜üAâpâ^ü[âôò╧Éöé═òíÉöÄgé┴é─éαé⌐é▄éóé▄é╣é±üB(ë╘Äq X Y) é═âpâ^ü[âôò╧
  116.  
  117. Éö X é╞ Y é¬éáéΦé▄é╖é╦üBé▒éΩé╞ (ë╘Äq ìDé½ ìgÆâ) é≡â}âbâ`âôâOé│é╣é─é▌é▄é╖üB
  118.  
  119. é╖éΘé╞üAX é═üuìDé½üvüAY é═üuìgÆâüvé╞êΩÆvé╖éΘé╠é┼üAâ}âbâ`âôâOé═ɼî≈é╡é▄é╖üB
  120.  
  121.  
  122.                         (ë╘Äq ìDé½ ìgÆâ)
  123.                           ü¬   ü¬    ü¬
  124.                           ü¢   ü¢    ü~
  125.                           ü½   ü½    ü½
  126.                         (æ╛ÿY   X    X )
  127.  
  128.                 X = ìDé½ é╛é⌐üAìgÆâé╞ X é╠ÆlüuìDé½üvé═êΩÆvé╡é╚éó
  129.  
  130.                    É} 4 : âpâ^ü[âôò╧Éöé╠ô«ì∞üié╗é╠éSüj
  131.  
  132.  
  133.   ìíôxé═üA(ë╘Äq X X) é≡ìléªé─é▌é▄é╖üBô»é╢âpâ^ü[âôò╧Éö X é¬éQë±ÄgéφéΩé─éó
  134.  
  135. é▄é╖é╦üBâfü[â^é╞êΩÆvé╡é╜âpâ^ü[âôò╧Éöé═üAé╗é╠îπâpâ^ü[âôé╠Æåé┼é═êΩÆvé╡é╜
  136.  
  137. âfü[â^é╞é╡é─ê╡éφéΩé▄é╖üB(ë╘Äq ìDé½ ìgÆâ) é╞â}âbâ`âôâOé│é╣éΘé╞üAì┼Åëé╠ X
  138.  
  139. é═üuìDé½üvé╞êΩÆvé╡é▄é╖üB2 ö╘û┌é╠ X é═üAüuìgÆâüvé╞öΣèré╖éΘé▒é╞é╔é╚éΦé▄é╖
  140.  
  141. é¬üAX é═è∙é╔üuìDé½üvé╞êΩÆvé╡é─éóéΘé╠é┼üAüuìDé½üvé╞üuìgÆâüvé≡öΣèré╖éΘé▒é╞
  142.  
  143. é╔é╚éΘé╠é┼é╖üBé╡é╜é¬é┴é─üAâ}âbâ`âôâOé═Ä╕ösé╡é▄é╖üB
  144.  
  145.   (ë╘Äq X X) é═ (ë╘Äq ìDé½ ìDé½) é╞é⌐ (ë╘Äq ìgÆâ ìgÆâ) é╠éµéñé╚âfü[â^é╞
  146.  
  147. êΩÆvé╡é▄é╖é¬üAé▒é╠ÅΩìçé═âfü[â^é╔ê╙ûíé¬éáéΦé▄é╣é±é╦üB
  148.  
  149.  
  150. note:
  151.  
  152.  [*1] VTOL é╠âVâôâ{âïé═üAêΩö╩é╠ Lisp é╞êßé┴é─ëpæσżò╢ÄÜé≡ïµò╩é╖éΘé╠é┼üA
  153.       é▒é╠ò√û@é¬Ägéªé▄é╖üBæ╝é╔é═üA(? x) é╠éµéñé╔æµéPùvæf鬠? é╠âèâXâgé≡
  154.       ò╧Éöé╞é╡é╜éΦüA? éΓ * é⌐éτÄné▄éΘâVâôâ{âïé≡ò╧Éöé╞é╖éΘò√û@é¬éáéΦé▄é╖üB
  155.  
  156.  
  157. ü¢âpâ^ü[âôò╧Éöé═ÿAæzâèâXâgé┼è╟ù¥é╖éΘ
  158.  
  159.   Lisp é╠ùpîΩé┼é═üAò╧Éöé╔Ælé≡ù^éªéΘé▒é╞é≡üuæ⌐ö¢(binding)üvé╞éóéóé▄é╖üBé▄
  160.  
  161. é╜üAÆlé¬ù^éªéτéΩé─éóé╚éóüAûóæ⌐ö¢é╠ò╧Éöé≡üuÄ⌐ùRò╧Éöüvé╞î─é╤é▄é╖üBâpâ^ü[âô
  162.  
  163. ò╧Éöé╠ÅΩìçüAì┼Åëé═Ä⌐ùRò╧Éöé┼éáéΦüAâfü[â^é╞â}âbâ`âôâOé╡é╜Ä₧é╔æ⌐ö¢é│éΩé▄é╖üB
  164.  
  165. é┬é▄éΦüAÄ⌐ùRò╧Éöé┼éáéΩé╬é╟é±é╚âfü[â^é╞éαêΩÆvé╡é▄é╖é¬üAæ⌐ö¢é│éΩé─éóéΩé╬üA
  166.  
  167. é╗é╠Ælé≡ĵéΦÅoé╡é─âfü[â^é╞öΣèré╖éΘé▒é╞é╔é╚éΦé▄é╖üBâpâ^ü[âôâ}âbâ`âôâOé≡Ä└
  168.  
  169. î╗é╖éΘÅΩìçüAé▒é╠ò╧Éöæ⌐ö¢é╠è╟ù¥ò√û@é¬â|âCâôâgé╔é╚éΦé▄é╖üB
  170.  
  171.   é▄é╕üAâIü[â\âhâbâNâXé╔ÿAæzâèâXâgé≡Ägé┴é─âpâ^ü[âôâ}âbâ`âôâOé≡Ä└î╗é╡é─é▌
  172.  
  173. é▄é╡éσéñüBè╓Éöû╝é═ match é╞é╡é▄é╖üBmatch é═ì─ïAé≡Ägé┴é─âèâXâgé≡ò¬ë≡é╡üA
  174.  
  175. ùvæfô»Ämé≡öΣèré╡é─éóé½é▄é╖üBmatch é═â}âbâ`âôâOé╔ɼî≈é╡é╜ÅΩìçüAâpâ^ü[âôò╧
  176.  
  177. Éöé╞é╗é╠Ælé≡èiö[é╖éΘÿAæzâèâXâgé≡ò╘é╡é▄é╖üBìíîπüAé▒é╠ÿAæzâèâXâgé╠é▒é╞é≡
  178.  
  179. üuæ⌐ö¢âèâXâgüvé╞î─é╘é▒é╞é╔é╡é▄é╖üBăé╠ùßé≡î⌐é─é¡é╛é│éóüB
  180.  
  181.  
  182.  Lisp > (match '(æ╛ÿY ìDé½ X) '(æ╛ÿY ìDé½ âRü[âqü[) nil)
  183.  ((X . âRü[âqü[))
  184.  
  185.  Lisp > (match '(æ╛ÿY Y âRü[âqü[) '(æ╛ÿY ìDé½ âRü[âqü[) nil)
  186.  ((Y . ìDé½))
  187.  
  188.  Lisp > (match '(ë╘Äq X Y) '(ë╘Äq ìDé½ ìgÆâ) nil)
  189.  ((Y . ìgÆâ) (X . ìDé½))
  190.  
  191.  
  192. 3 ö╘û┌é╠ê°Éöé═æ⌐ö¢âèâXâgé≡Ä≤é»ÄµéΦé▄é╖üBì┼Åëé═üAé╟é╠âpâ^ü[âôò╧Éöé╔éαÆlé═
  193.  
  194. ôⁿé┴é─éóé╚éóé╠é┼üAê°Éöé╔é═ nil é≡ôné╡é▄é╖üBmatch é═âpâ^ü[âôò╧Éöé¬é╚é¡é─
  195.  
  196. éαüAâ}âbâ`âôâOé¬É¼î≈é╡é╜Ä₧é═ nil é≡ò╘é╡é▄é╖üB
  197.  
  198.  
  199.  Lisp > (match '(æ╛ÿY ìDé½ âRü[âqü[) '(æ╛ÿY ìDé½ âRü[âqü[) nil)
  200.  nil
  201.  
  202.  Lisp > (match '(ë╘Äq ìDé½ ìgÆâ) '(ë╘Äq ìDé½ ìgÆâ) nil)
  203.  nil
  204.  
  205.  
  206. nil é═Ä╕ösé≡ò\é╖é▒é╞é¬òüÆ╩é┼é╖é¬üAé▒é╠ÅΩìçé═æ⌐ö¢âèâXâgé¬ï≤é┼éáéΘé▒é╞é≡ò\
  207.  
  208. é╡é▄é╖üBé▒é╠é╜é▀üAâ}âbâ`âôâOé¬Ä╕ösé╡é╜ÅΩìçé═üAâVâôâ{âï fail é≡ò╘é╖é▒é╞é╔
  209.  
  210. é╡é▄é╖üB
  211.  
  212.  
  213.  Lisp > (match '(æ╛ÿY Y âRü[âqü[) '(æ╛ÿY ìDé½ âRâRâA) nil)
  214.  fail
  215.  
  216.  Lisp > (match '(ë╘Äq X X) '(ë╘Äq ìDé½ ìgÆâ) nil)
  217.  fail
  218.  
  219.  
  220.   match é≡ì∞éΘæOé╔üAâpâ^ü[âôò╧Éöé≡è╟ù¥é╖éΘé╜é▀é╠è╓Éöé≡ì∞é┴é─é¿é½é▄é╡éσéñüB
  221.  
  222. é▄é╕üAùvæfé¬âpâ^ü[âôò╧Éöé┼éáéΘé⌐â`âFâbâNé╖éΘè╓Éö variablep é┼é╖üB
  223.  
  224.  
  225.      List 1 : ùvæfé═ò╧Éöé⌐
  226.  
  227.    1 (defun variablep (pattern)
  228.    2   (and (symbolp pattern)
  229.    3        (upper-case-p (char pattern 0))))
  230.  
  231.  
  232.   ÅqîΩ symbolp é┼ pattern é¬âVâôâ{âïé┼éáéΘé▒é╞é≡èmöFé╡é▄é╖üBò╢ÄÜù±é⌐éτò╢
  233.  
  234. ÄÜé≡ĵéΦÅoé╖é╔é═è╓Éö char é≡Ägéóé▄é╖üB
  235.  
  236.  
  237.         char string index
  238.  
  239.  
  240.   ò╢ÄÜù± string é╠ index ö╘û┌é╠ò╢ÄÜé≡ò╘é╡é▄é╖üBindex é═ 0 é⌐éτÄné▄éΦé▄é╖üB
  241.  
  242. ò╢ÄÜù±é╠Æ╖é│éµéΦÆ╖éó index é≡ÄwÆΦé╡é╜ÅΩìçé═ nil é≡ò╘é╡é▄é╖üBê°Éö string
  243.  
  244. é¬âVâôâ{âïé╠ÅΩìçé═üAé╗é╠û╝æOé≡ĵéΦÅoé╡é▄é╖üBè╚ÆPé╚Ägùpùßé≡Īé╡é▄é╡éσéñüB
  245.  
  246.  
  247.  Lisp > (char "abcde" 0)
  248.  #\a
  249.  
  250.  Lisp > (char 'abcde  3)
  251.  #\d
  252.  
  253.  Lisp > (char "abcde" 5)
  254.  nil
  255.  
  256.  
  257.   ëpæσò╢ÄÜé≡ö╗ò╩é╖éΘé╔é═üAÅqîΩ upper-case-p é≡Ägéóé▄é╖üB
  258.  
  259.  
  260.         upper-case-p char
  261.  
  262.  
  263. ê°Éöé╠ò╢ÄÜé¬ö╝èpëpÄÜé╠æσò╢ÄÜé╚ÅΩìç t é≡üAé╗éñé┼é╚é»éΩé╬ nil é≡ò╘é╡é▄é╖üB
  264.  
  265. ïté╔üAëpżò╢ÄÜé≡ö╗ò╩é╖éΘé╔é═ lower-case-p é≡Ägéóé▄é╖üB
  266.  
  267.   variablep é═üAchar é┼ɵô¬ò╢ÄÜé≡ĵéΦÅoé╡é─üAé╗é╠ò╢ÄÜé≡ upper-case-p é┼
  268.  
  269. â`âFâbâNé╖éΩé╬éóéóé╠é┼é╖üBăé═üAæ⌐ö¢âèâXâgé╔âfü[â^é≡Æ╟ë┴é╖éΘ add-binding
  270.  
  271. é≡ì∞éΦé▄é╖üB
  272.  
  273.  
  274.      List 2 : æ⌐ö¢âèâXâgé╔Æ╟ë┴é╖éΘ
  275.  
  276.    1 (defun add-binding (var value binding)
  277.    2   (cons (cons var value) binding))
  278.  
  279.  
  280. é▒éΩéαè╚ÆPé┼é╖é╦üBê°Éö var é╔ò╧Éöû╝üAvalue é╔ÆlüAbinding é╔æ⌐ö¢âèâXâgé≡
  281.  
  282. Ä≤é»ÄµéΦé▄é╖üBé▄é╕ cons é┼ var é╞ value é≡âhâbâgæ╬é╔é▄é╞é▀üAé╗éΩé≡ cons
  283.  
  284. é┼ binding é╠ɵô¬é╔Æ╟ë┴é╡é▄é╖üBò╘éΦÆlé═üAâpâ^ü[âôò╧Éöé≡Æ╟ë┴é╡é╜æ⌐ö¢âèâX
  285.  
  286. âgé╔é╚éΦé▄é╖üB
  287.  
  288.  
  289. ü¢match é╠Ä└æò
  290.  
  291.   é╗éΩé┼é═ match é≡ì∞éΦé▄é╖üBâèâXâgæÇì∞é╠èεû{é┼éáéΘüAcar é╞ cdr é┼âèâXâg
  292.  
  293. é≡ò¬ë≡é╡é─éóé½üAùvæfé≡öΣèré╡é─éóé½é▄é╖üBé▒é▒é┼î¿è╡éτé╡é╔üAâèâXâgé¬ôÖé╡éó
  294.  
  295. é⌐â`âFâbâNé╖éΘÅqîΩ equal-list é≡ì∞é┴é─é▌é▄é╡éσéñüBè╚ÆPé╠é╜é▀üAâAâgâÇé╠ö╗
  296.  
  297. ÆΦé═ÅqîΩ eql é≡Ägéñé▒é╞é╔é╡é▄é╖üBì─ïAÆΦï`é╔è╡éΩé─éóéΩé╬üAé╖é«é╔ì∞éΩéΘé╞
  298.  
  299. Ävéóé▄é╖é¬üAé╟éñé┼é╡éσéñé⌐üB
  300.  
  301.   ìléªò√é═è╚ÆPé┼é╖üB2 é┬é╠ê°Éöé¬âAâgâÇé┼éáéΩé╬üAeql é┼öΣèré╖éΩé╬éóéóé┼é╖
  302.  
  303. é╦üBâèâXâgô»Ämé┼éáéΩé╬üAâèâXâgé╠ car é≡öΣèré╡é▄é╖üBé▒é╠Ä₧üAâèâXâgé╠ùvæf
  304.  
  305. é¬âèâXâgé╠ÅΩìçéαéáéΘé╠é┼üAeql é┼öΣèré╖éΘé▒é╞é═é┼é½é▄é╣é±üBé▒é▒é═ì─ïAé╠Åo
  306.  
  307. ö╘é┼é╖é╦üBequal-list é≡î─é╤Åoé╡é─öΣèré╖éΩé╬éóéóéφé»é┼é╖üBé╗é╠îïë╩é¬ôÖé╡
  308.  
  309. éóé╠é┼éáéΩé╬üAâèâXâgé╠ cdr é≡öΣèré╡é▄é╖üBé▒é▒é┼éα equal-list é≡î─é╤Åoé╡
  310.  
  311. é▄é╖üB2 é┬é╠ê°Éöé¬âAâgâÇé┼éαé╚é¡âèâXâgé┼éαé╚éóÅΩìçé═üAòsêΩÆvé╞ö╗ÆΦé╖éΩé╬
  312.  
  313. éóéóé┼é╡éσéñüBâvâìâOâëâÇé═ăé╠éµéñé╔é╚éΦé▄é╖üB
  314.  
  315.  
  316.      List 3 : âèâXâgé¬ôÖé╡éóé⌐
  317.  
  318.    1 (defun equal-list (list1 list2)
  319.    2   (cond ((and (atom list1) (atom list2))
  320.    3          (eql list1 list2))
  321.    4         ((and (consp list1) (consp list2))
  322.    5          (if (equal-list (car list1) (car list2))
  323.    6              (equal-list (cdr list1) (cdr list2))))
  324.    7         (t nil)))
  325.  
  326.  
  327.   2 ìsû┌é┼âAâgâÇé╠â`âFâbâNüA4 ìsû┌é┼âèâXâgé╠â`âFâbâNé≡ìsé┴é─éóé▄é╖üBlistp
  328.  
  329. é═ nil é┼éαÉ^é╞ö╗ÆΦé╖éΘé╜é▀üAé▒é▒é┼é═ consp é≡Ägé┴é─éóé▄é╖üB5 ìsû┌é┼üAê°
  330.  
  331. Éö list1 é╞ list2 é╠ùvæfé≡ car é┼ĵéΦÅoé╡é─üAequal-list é≡ì─ïAî─é╤Åoé╡é╡
  332.  
  333. é▄é╖üBé╗éΩé¬É^é┼éáéΩé╬üAÄcéΦé╠âèâXâgé≡ equal-list é┼â`âFâbâNé╡é▄é╖üB
  334.  
  335.  
  336.   match é╠ÅΩìçéαüAèεû{ôIé╚ìléªò√é═ equal-list é╞ô»é╢é┼é╖üBé▒é▒é╔âpâ^ü[âô
  337.  
  338. ò╧Éöé╠Åêù¥é≡òté»ë┴éªéΩé╬éóéóéφé»é┼é╖üBâpâ^ü[âôò╧Éöé╞é╠â}âbâ`âôâOé═è╓Éö
  339.  
  340. match-variable é┼ìséóüAâèâXâgé╠öΣèré═è╓Éö match-pieces é┼ìséñé▒é╞é╔é╖éΘ
  341.  
  342. é╞üAâvâìâOâëâÇé═ăé╠éµéñé╔é╚éΦé▄é╖üB
  343.  
  344.  
  345.      List 4 : â}âbâ`âôâO
  346.  
  347.    1 (defun match (pattern datum binding)
  348.    2   (cond ((variablep pattern)
  349.    3          (match-variable pattern datum binding))
  350.    4         ((and (atom pattern) (atom datum))
  351.    5          (match-atoms pattern datum binding))
  352.    6         ((and (consp pattern) (consp datum))
  353.    7          (match-pieces pattern datum binding))
  354.    8         (t 'fail)))
  355.  
  356.  
  357. âpâ^ü[âôò╧Éöé═âVâôâ{âïé╚é╠é┼üAatom é┼ö╗ÆΦé╖éΘé╞É^é╔é╚é┴é─é╡é▄éóé▄é╖üBé▒
  358.  
  359. é╠é╜é▀üAì┼Åëé╔ variablep é┼ pattern é¬âpâ^ü[âôò╧Éöé⌐â`âFâbâNé╡é─éóé▄é╖üB
  360.  
  361. pattern é╞ datum é¬âAâgâÇé┼éáéΩé╬ equal é┼öΣèré╡é▄é╖üBé▒é╠Åêù¥é═ match-
  362.  
  363. atoms é┼ìséóé▄é╖üBpattern é╞ datum é¬âèâXâgé┼éáéΩé╬üAmatch-pieces é┼â`âFâb
  364.  
  365. âNé≡ìséóé▄é╖üBé▒é▒é┼ match é¬ì─ïAî─é╤Åoé╡é│éΩé▄é╖üBé╗éΩê╚èOé╠ÅΩìçé═ fail
  366.  
  367. é≡ò╘é╡é▄é╖üB
  368.  
  369.   é▄é╕è╚ÆPé╚ match-atoms é⌐éτî⌐é─éóé½é▄é╡éσéñüB
  370.  
  371.  
  372.      List 5 : âAâgâÇô»Ämé╠â}âbâ`âôâO
  373.  
  374.    1 (defun match-atoms (pattern datum binding)
  375.    2   (if (equal pattern datum) binding 'fail))
  376.  
  377.  
  378. pattern é╞ datum é≡ÅqîΩ equal é┼öΣèré╡é▄é╖üBôÖé╡éóÅΩìçé═ÿAæzâèâXâg binding
  379.  
  380. é≡ò╘é╡üAé╗éñé┼é╚é»éΩé╬ fail é≡ò╘é╡é▄é╖üB
  381.  
  382.   Äƒé═üAâpâ^ü[âôò╧Éöé╞é╠â}âbâ`âôâOé≡Æ▓é╫éΘ match-variable é┼é╖üB
  383.  
  384.  
  385.      List 6 : âpâ^ü[âôò╧Éöé╞é╠â}âbâ`âôâO
  386.  
  387.    1 (defun match-variable (var datum binding)
  388.    2   (let ((value (assoc var binding)))
  389.    3     (if value
  390.    4         (match (cdr value) datum binding)
  391.    5         (add-binding var datum binding))))
  392.  
  393.  
  394. é▄é╕üAæ⌐ö¢âèâXâg binding é⌐éτâpâ^ü[âôò╧Éö var é≡ assoc é┼îƒì⌡é╡é▄é╖üBassoc
  395.  
  396. é═ö¡î⌐é╡é╜éτâhâbâgæ╬é≡ò╘é╖é╠é┼üAé╗éΩé≡ value é╔âZâbâgé╡é▄é╖üBâpâ^ü[âôò╧
  397.  
  398. Éöé¬î⌐é┬é⌐éΩé╬üAé╗é╠Ælé≡Ägé┴é─ì─ôxâ}âbâ`âôâOé≡ÄÄé▌é▄é╖üBé▒éΩé═ match é≡
  399.  
  400. ì─ïAî─é╤Åoé╡é╖éΩé╬éóéóé┼é╖é╦üBÆlé═ (cdr value) é┼ĵéΦÅoé╖é▒é╞é¬é┼é½é▄é╖üB
  401.  
  402. âpâ^ü[âôò╧Éö鬠binding é╔û│éóÅΩìçé═üAé╗é╠âpâ^ü[âôò╧Éöé═é▄é╛æ⌐ö¢é│éΩé─éó
  403.  
  404. é▄é╣é±üBé╗é▒é┼üAadd-binding é≡î─é╤Åoé╡é─üAbinding é╔âpâ^ü[âôò╧Éöé╞Ælé≡ôo
  405.  
  406. ÿ^é╡é▄é╖üB
  407.  
  408.   Äƒé═âèâXâgé╠â}âbâ`âôâOé≡ìséñ match-pieces é┼é╖üB
  409.  
  410.  
  411.      List 7 : âèâXâgé╠â}âbâ`âôâO
  412.  
  413.    1 (defun match-pieces (pattern datum binding)
  414.    2   (let ((result (match (car pattern) (car datum) binding)))
  415.    3     (if (eq result 'fail)
  416.    4         'fail
  417.    5         (match (cdr pattern) (cdr datum) result))))
  418.  
  419.  
  420.   âèâXâgé≡ car é╞ cdr é┼ò¬ë≡é╡é─â}âbâ`âôâOé╡é─éóé½é▄é╖üBé▄é╕ pattern é╞
  421.  
  422. datum é╠ùvæfé≡ car é┼ĵéΦÅoé╡é─üAmatch é≡ì─ïAî─é╤Åoé╡é╡é▄é╖üBîïë╩é═ result
  423.  
  424. é╔âZâbâgé╡é▄é╖üBâ}âbâ`âôâOé╔Ä╕ösé╡é╜éτ fail é≡ò╘é╡é▄é╖üBâ}âbâ`âôâOé╔ɼî≈
  425.  
  426. é╡é╜éτüAÄcéΦé╠âèâXâgé≡ match é┼Æ▓é╫é▄é╖üBé▒é╠Ä₧üAæ⌐ö¢âèâXâgé═ binding é┼
  427.  
  428. é═é╚é¡ result é≡Ägéñé▒é╞é¬â|âCâôâgé┼é╖üB2 ìsû┌é╠ match é╔éµéΦüAÉVé╡éóâp
  429.  
  430. â^ü[âôò╧Éöé¬Æ╟ë┴é│éΩé─éóéΘé⌐éαé╡éΩé╚éóé⌐éτé┼é╖üB
  431.  
  432.   é▒éΩé┼âvâìâOâëâÇé═è«É¼é┼é╖üBâvâìâOâëâÇé═âtâ@âCâï MATCH.VL é╔èiö[é│éΩé─
  433.  
  434. éóé▄é╖üBâgâîü[âXé≡âZâbâgé╡é─ô«é⌐é╡é─é▌éΘé╞üAéµé¡ù¥ë≡é┼é½éΘé╞Ävéóé▄é╖üB
  435.  
  436.  
  437.  
  438. üiédénéeüj
  439.